// 稀疏数组

// 创建一个二维数组
// 0:表示没有棋子，1：表示黑子，2：表示蓝子

// 一.完成棋盘初始化，二维数组初始化
const LEN = 11;
let chessArr1 = [];
for (let i = 0; i < LEN; i++) {
    let arr = [];
    for (let j = 0; j < LEN; j++) {
        arr.push(0);
    }
    chessArr1.push(arr);
}
// 棋盘添加棋子
chessArr1[1][2] = 1;// 添加白棋子
chessArr1[2][3] = 2;// 添加黑棋子
console.log("棋盘");
console.log(chessArr1);


// 二.二维数组转换成稀疏数组
// 1.先遍历二维数组，得到非0数据的个数
let nonZero = [];
for (let i = 0; i < chessArr1.length; i++) {
    for (let j = 0; j < chessArr1[i].length; j++) {
        if (chessArr1[i][j] !== 0) {
            nonZero.push(chessArr1[i][j]);
        }
    }
}
console.log("有效数据个数");
console.log(nonZero.length);


// 2.创建对应的稀疏数组
let sparseArr = [];

// 记录棋盘大小，棋子个数
// 行数，列数，有效值个数
sparseArr.push([LEN, LEN, nonZero.length]);

// 记录棋子位置信息及值
for (let i = 0; i < chessArr1.length; i++) {
    for (let j = 0; j < chessArr1[i].length; j++) {
        if (chessArr1[i][j] !== 0) {
            sparseArr.push([i, j, chessArr1[i][j]]);
        }
    }
}
console.log("稀疏数组");
// 得到稀疏数组
console.log(sparseArr);


// 三。将稀疏数组恢复成二维数组
// 1.读取记录棋盘大小，初始化棋盘
let row = sparseArr[0][0];
let col = sparseArr[0][1];
let chessArr2 = [];
for (let i = 0; i < row; i++) {
    let arr = [];
    for (let j = 0; j < col; j++) {
        arr.push(0);
    }
    chessArr2.push(arr);
}
for (let i = 1; i < sparseArr.length; i++) {
    chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2]
}
console.log("原始棋盘");
console.log(chessArr2);